home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 November / PCWNOV08.iso / Software / Freeware / Adobe Media Player 1.1 / adobe_media_player.air / AMP.swf / scripts / mx / managers / NativeDragManagerImpl.as < prev    next >
Encoding:
Text File  |  2008-07-17  |  11.5 KB  |  316 lines

  1. package mx.managers
  2. {
  3.    import flash.desktop.Clipboard;
  4.    import flash.desktop.NativeDragManager;
  5.    import flash.desktop.NativeDragOptions;
  6.    import flash.display.BitmapData;
  7.    import flash.display.DisplayObject;
  8.    import flash.display.InteractiveObject;
  9.    import flash.events.MouseEvent;
  10.    import flash.events.NativeDragEvent;
  11.    import flash.geom.Point;
  12.    import flash.system.Capabilities;
  13.    import mx.core.DragSource;
  14.    import mx.core.IFlexDisplayObject;
  15.    import mx.core.IUIComponent;
  16.    import mx.core.UIComponentGlobals;
  17.    import mx.core.mx_internal;
  18.    import mx.events.DragEvent;
  19.    import mx.events.FlexEvent;
  20.    import mx.managers.dragClasses.DragProxy;
  21.    import mx.styles.CSSStyleDeclaration;
  22.    import mx.styles.StyleManager;
  23.    
  24.    use namespace mx_internal;
  25.    
  26.    public class NativeDragManagerImpl implements IDragManager
  27.    {
  28.       private static var sm:ISystemManager;
  29.       
  30.       private static var instance:IDragManager;
  31.       
  32.       private var _dragImage:IFlexDisplayObject;
  33.       
  34.       private var _relatedObject:InteractiveObject;
  35.       
  36.       private var _allowedActions:NativeDragOptions;
  37.       
  38.       private var _action:String;
  39.       
  40.       private var _clipboard:Clipboard;
  41.       
  42.       public var dragProxy:DragProxy;
  43.       
  44.       private var _dragInitiator:IUIComponent;
  45.       
  46.       private var mouseIsDown:Boolean = false;
  47.       
  48.       private var _offset:Point;
  49.       
  50.       private var _allowMove:Boolean;
  51.       
  52.       public function NativeDragManagerImpl()
  53.       {
  54.          super();
  55.          if(instance)
  56.          {
  57.             throw new Error("Instance already exists.");
  58.          }
  59.          mx_internal::registerSystemManager(sm);
  60.       }
  61.       
  62.       public static function getInstance() : IDragManager
  63.       {
  64.          if(!instance)
  65.          {
  66.             sm = SystemManagerGlobals.topLevelSystemManagers[0];
  67.             instance = new NativeDragManagerImpl();
  68.          }
  69.          return instance;
  70.       }
  71.       
  72.       public function getFeedback() : String
  73.       {
  74.          return NativeDragManager.dropAction;
  75.       }
  76.       
  77.       mx_internal function unregisterSystemManager(param1:ISystemManager) : void
  78.       {
  79.          if(param1.isTopLevel())
  80.          {
  81.             param1.removeEventListener(MouseEvent.MOUSE_DOWN,sm_mouseDownHandler);
  82.             param1.removeEventListener(MouseEvent.MOUSE_UP,sm_mouseUpHandler);
  83.          }
  84.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,nativeDragEventHandler,true);
  85.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_COMPLETE,nativeDragEventHandler,true);
  86.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_DROP,nativeDragEventHandler,true);
  87.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_EXIT,nativeDragEventHandler,true);
  88.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_OVER,nativeDragEventHandler,true);
  89.          param1.stage.removeEventListener(NativeDragEvent.NATIVE_DRAG_START,nativeDragEventHandler,true);
  90.       }
  91.       
  92.       mx_internal function registerSystemManager(param1:ISystemManager) : void
  93.       {
  94.          if(param1.isTopLevel())
  95.          {
  96.             param1.addEventListener(MouseEvent.MOUSE_DOWN,sm_mouseDownHandler);
  97.             param1.addEventListener(MouseEvent.MOUSE_UP,sm_mouseUpHandler);
  98.          }
  99.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,nativeDragEventHandler,true);
  100.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_COMPLETE,nativeDragEventHandler,true);
  101.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,nativeDragEventHandler,true);
  102.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_EXIT,nativeDragEventHandler,true);
  103.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_OVER,nativeDragEventHandler,true);
  104.          param1.stage.addEventListener(NativeDragEvent.NATIVE_DRAG_START,nativeDragEventHandler,true);
  105.       }
  106.       
  107.       private function sm_mouseUpHandler(param1:MouseEvent) : void
  108.       {
  109.          mouseIsDown = false;
  110.       }
  111.       
  112.       public function get isDragging() : Boolean
  113.       {
  114.          return NativeDragManager.isDragging;
  115.       }
  116.       
  117.       public function doDrag(param1:IUIComponent, param2:DragSource, param3:MouseEvent, param4:IFlexDisplayObject = null, param5:Number = 0, param6:Number = 0, param7:Number = 0.5, param8:Boolean = true) : void
  118.       {
  119.          var _loc9_:Number = NaN;
  120.          var _loc10_:Number = NaN;
  121.          var _loc12_:String = null;
  122.          var _loc13_:Object = null;
  123.          var _loc14_:CSSStyleDeclaration = null;
  124.          var _loc15_:Class = null;
  125.          if(isDragging)
  126.          {
  127.             return;
  128.          }
  129.          if(!(param3.type == MouseEvent.MOUSE_DOWN || param3.type == MouseEvent.CLICK || mouseIsDown || param3.buttonDown))
  130.          {
  131.             return;
  132.          }
  133.          _clipboard = new Clipboard();
  134.          _dragInitiator = param1;
  135.          _offset = new Point(param5,param6);
  136.          _allowMove = param8;
  137.          _offset.y -= InteractiveObject(param1).mouseY;
  138.          _offset.x -= InteractiveObject(param1).mouseX;
  139.          _allowedActions = new NativeDragOptions();
  140.          _allowedActions.allowCopy = true;
  141.          _allowedActions.allowLink = true;
  142.          _allowedActions.allowMove = param8;
  143.          var _loc11_:int = 0;
  144.          while(_loc11_ < param2.formats.length)
  145.          {
  146.             _loc12_ = param2.formats[_loc11_] as String;
  147.             _loc13_ = param2.dataForFormat(_loc12_);
  148.             _clipboard.setData(_loc12_,_loc13_);
  149.             _loc11_++;
  150.          }
  151.          if(!param4)
  152.          {
  153.             _loc14_ = StyleManager.getStyleDeclaration("DragManager");
  154.             _loc15_ = _loc14_.getStyle("defaultDragImageSkin");
  155.             param4 = new _loc15_();
  156.             _loc9_ = !!param1 ? Number(param1.width) : 0;
  157.             _loc10_ = !!param1 ? Number(param1.height) : 0;
  158.             if(param4 is IFlexDisplayObject)
  159.             {
  160.                IFlexDisplayObject(param4).setActualSize(_loc9_,_loc10_);
  161.             }
  162.          }
  163.          else
  164.          {
  165.             _loc9_ = Number(param4.width);
  166.             _loc10_ = Number(param4.height);
  167.          }
  168.          _dragImage = param4;
  169.          if(param4 is IUIComponent && param4 is ILayoutManagerClient && !ILayoutManagerClient(param4).initialized && Boolean(param1))
  170.          {
  171.             param4.addEventListener(FlexEvent.UPDATE_COMPLETE,initiateDrag);
  172.             param1.systemManager.popUpChildren.addChild(DisplayObject(param4));
  173.             if(param4 is ILayoutManagerClient)
  174.             {
  175.                UIComponentGlobals.mx_internal::layoutManager.validateClient(ILayoutManagerClient(param4),true);
  176.             }
  177.             if(param4 is IUIComponent)
  178.             {
  179.                param4.setActualSize(_loc9_,_loc10_);
  180.                _loc9_ = Number((param4 as IUIComponent).getExplicitOrMeasuredWidth());
  181.                _loc10_ = Number((param4 as IUIComponent).getExplicitOrMeasuredHeight());
  182.             }
  183.             else
  184.             {
  185.                _loc9_ = Number(param4.measuredWidth);
  186.                _loc10_ = Number(param4.measuredHeight);
  187.             }
  188.             if(param4 is ILayoutManagerClient)
  189.             {
  190.                UIComponentGlobals.mx_internal::layoutManager.validateClient(ILayoutManagerClient(param4));
  191.             }
  192.             return;
  193.          }
  194.          initiateDrag(null,false);
  195.       }
  196.       
  197.       public function showFeedback(param1:String) : void
  198.       {
  199.          if(param1 == DragManager.MOVE && !_allowedActions.allowMove)
  200.          {
  201.             return;
  202.          }
  203.          if(param1 == DragManager.COPY && !_allowedActions.allowCopy)
  204.          {
  205.             return;
  206.          }
  207.          if(param1 == DragManager.LINK && !_allowedActions.allowLink)
  208.          {
  209.             return;
  210.          }
  211.          NativeDragManager.dropAction = param1;
  212.       }
  213.       
  214.       public function acceptDragDrop(param1:IUIComponent) : void
  215.       {
  216.          var _loc2_:InteractiveObject = param1 as InteractiveObject;
  217.          if(_loc2_)
  218.          {
  219.             NativeDragManager.acceptDragDrop(_loc2_);
  220.          }
  221.       }
  222.       
  223.       private function initiateDrag(param1:FlexEvent, param2:Boolean = true) : void
  224.       {
  225.          var _loc3_:BitmapData = null;
  226.          if(param2)
  227.          {
  228.             _dragImage.removeEventListener(FlexEvent.UPDATE_COMPLETE,initiateDrag);
  229.          }
  230.          if(Boolean(_dragImage.width) && Boolean(_dragImage.height))
  231.          {
  232.             _loc3_ = new BitmapData(_dragImage.width,_dragImage.height,true,0);
  233.          }
  234.          else
  235.          {
  236.             _loc3_ = new BitmapData(1,1,true,0);
  237.          }
  238.          _loc3_.draw(_dragImage);
  239.          if(param2 && _dragImage is IUIComponent && Boolean(_dragInitiator))
  240.          {
  241.             _dragInitiator.systemManager.popUpChildren.removeChild(DisplayObject(_dragImage));
  242.          }
  243.          NativeDragManager.doDrag(InteractiveObject(_dragInitiator),_clipboard,_loc3_,_offset,_allowedActions);
  244.       }
  245.       
  246.       public function endDrag() : void
  247.       {
  248.       }
  249.       
  250.       private function sm_mouseDownHandler(param1:MouseEvent) : void
  251.       {
  252.          mouseIsDown = true;
  253.       }
  254.       
  255.       private function nativeDragEventHandler(param1:NativeDragEvent) : void
  256.       {
  257.          var _loc8_:String = null;
  258.          var _loc9_:Object = null;
  259.          var _loc12_:int = 0;
  260.          var _loc2_:String = param1.type.charAt(6).toLowerCase() + param1.type.substr(7);
  261.          var _loc3_:DragSource = new DragSource();
  262.          var _loc4_:DisplayObject = param1.target as DisplayObject;
  263.          var _loc5_:Clipboard = param1.clipboard;
  264.          var _loc6_:Array = _loc5_.formats;
  265.          var _loc7_:int = int(_loc6_.length);
  266.          _allowedActions = param1.allowedActions;
  267.          var _loc10_:Boolean = false;
  268.          if(Capabilities.os.substring(0,3) == "Mac")
  269.          {
  270.             _loc10_ = Boolean(param1.commandKey);
  271.          }
  272.          else
  273.          {
  274.             _loc10_ = Boolean(param1.controlKey);
  275.          }
  276.          if(NativeDragManager.dragInitiator != null)
  277.          {
  278.             NativeDragManager.dropAction = _loc10_ || !_allowMove ? DragManager.COPY : DragManager.MOVE;
  279.          }
  280.          if(param1.type != NativeDragEvent.NATIVE_DRAG_EXIT)
  281.          {
  282.             _loc12_ = 0;
  283.             while(_loc12_ < _loc7_)
  284.             {
  285.                _loc8_ = _loc6_[_loc12_];
  286.                if(_loc5_.hasFormat(_loc8_))
  287.                {
  288.                   _loc9_ = _loc5_.getData(_loc8_);
  289.                   _loc3_.addData(_loc9_,_loc8_);
  290.                }
  291.                _loc12_++;
  292.             }
  293.          }
  294.          if(param1.type == NativeDragEvent.NATIVE_DRAG_DROP)
  295.          {
  296.             _relatedObject = param1.target as InteractiveObject;
  297.          }
  298.          var _loc11_:DragEvent = new DragEvent(_loc2_,false,param1.cancelable,NativeDragManager.dragInitiator as IUIComponent,_loc3_,param1.dropAction,_loc10_,param1.altKey,param1.shiftKey);
  299.          _loc11_.buttonDown = param1.buttonDown;
  300.          _loc11_.delta = param1.delta;
  301.          _loc11_.localX = param1.localX;
  302.          _loc11_.localY = param1.localY;
  303.          if(_loc2_ == DragEvent.DRAG_COMPLETE)
  304.          {
  305.             _loc11_.relatedObject = _relatedObject;
  306.          }
  307.          else
  308.          {
  309.             _loc11_.relatedObject = param1.relatedObject;
  310.          }
  311.          _loc4_.dispatchEvent(_loc11_);
  312.       }
  313.    }
  314. }
  315.  
  316.